备注：
登陆密码账户：
admin123
admin123456

Service层主要用于后端交互实现数据
--------------------------------------------------
Token是在客户端频繁向服务端请求数据，
服务端频繁的去数据库查询用户名和密码并进行对比，
判断用户名和密码正确与否，并作出相应提示，
在这样的背景下，Token便应运而生。

token其实说的更通俗点可以叫暗号，
在一些数据传输之前，要先进行暗号的核对，
不同的暗号被授权不同的数据操作。
--------------------------------------------------
UserService(接口) //UserServiceImpl实现类
8/4
CGB2105-Day12
1.用户的登陆实现
2.控制权限 路由导航守卫
3.系统首页的跳转
4.左测菜单的实现

1.用户的登陆功能
输入相对应的信息进行登陆
UUID.randomUUID()创建一个不重复的一串数字组合成的id
DigestUtpils.md5DigestAsHex
md5是加密字符密码

8/5
1.用户登陆的实现
session/会话控制可以用户存储数据
生命周期 整个会话窗口 窗口关闭 周期结束 数据清楚

cookie是一个文本文件
存储用户登录信息(加密数据 更加安全)
保存到用户计算机终端 可以临时存储信息
//对数据安全性较高的用session
cookie要大量查询的数据

2.1系统首页跳转的说明
首先js要成功进行跳转
在index.js进行设置跳转
import Home from "../components/Home";
  {path: '/home', component: Home}
  2.2路由导航守卫
  用户没有登陆 不允许访问其他的页面 只能访问login
  实现的规则：1.前端实现vue规范 *路由导航守卫
  2.单点登陆策略

  /**配置路由导航守卫
   *to是请求的网址
   * from是请求从哪里来
   * next 回调函数 放行/跳转
   * router.beforeEach((to, from, next) => {
  })
   ==在比较的时候会转类型,===在比较的时候会比较类型*/

  router.beforeEach((to, from, next) => {
    // console.log(to)
  //如果用户访问/longin请求应该放行
    // if (to.path === '/login') return next()//return 终止程序 返回结果

    if (to.path === '/login') return next()
    console.log("后续代码被执行了！！！")
    //将所有的请求放行
    next()

    //如果用户不访问login则要校验是否登陆 检查是否有Token
    //sessionStorage会话存储

    /**   //获取用户token信息
     let token = result.data
     window.sessionStorage.setItem("token",token)
     getItem跳转到的用户名的返回值的信息*/

    let token = window.sessionStorage.getItem('token')
  //在进行判断token的值是否为空

    if (token !== null && token.length > 0) {
      next()
    } else {
      //没有token应该跳转到登陆页面"/login"
      return next("/login")
    }

  })
---------------------------------------------------
14.19/
1.表设计说明
/*查询一级分类菜单*/
SELECT *FROM rights WHERE parent_id=0//查1级
/*查询二级商品分类信息*/
SELECT * FROM rights WHERE parent_id=1

 select *from rights where parent_id=2//查询3级

 --------------------------------------------------
 重要+++
 2.完成pojo的说明 rights的编辑
 3.1.3 构建层级代码结构

 编辑Mapper----Service-----Controller 层级代码 方便后续业务调用

  0.在pojo中准备Rights类中的需求数据
 @TableName("rights")
 //表示对象与表的映射关系 必须编辑Linux系统严格区分大小写
 @Data
 //简化使用get/set方法
  --------------------------------------------------
 3. 增加层级代码业务流程 ing++
  1.Mapper层---
  创建RightsMapper
  public interface RightsMapper extends BaseMapper<Rights> {
      //继承获取BaseMapper<Rights>中是数值
  }
  --------------------------------------------------
  2.Service层--
  2.1创建接口RightsService
public interface RightsService {
//创建List接口映射是pojo中的Rights类
//创建的getAll方法
    List<Rights> getAll();
}

  --------------------------------------------------
  2.2和RightsServiceImpl实现接口
@Service
//将自动注册到Spring容器 自动获取bean

public class RightServiceImpl implements RightsService {
    @Autowired
    private RightsMapper rightsMapper;

    @Override
    //消除 set ，get方法

    public List<Rights> getAll() {
        //查询全部不需要条件
        return rightsMapper.selectList(null);
        //查询rightsMapper中的查询 语句select/List/(null)
    }
  --------------------------------------------------
  3.Controller层--
  //标识Controller类 交给Spring容器管理/返回数据
3.1创建RightsController类

@RestController
//标识Controller类 交给Spring容器管理/返回JSON数据
@CrossOrigin

//demo测试 获取全部列表信息
public class RightsController {
    @Autowired
    private RightsService rightsService;

    //demo测试 获取全部列表信息
/**
* 需求: 查获取全部列表信息
* URL: /getAll
* 返回值: List<Rights>
*/

    @RequestMapping("/getAll")
    public List<Rights> getAll(){

        return rightsService.getAll();
    }


    --------------------------------------------------
    --------------------------------------------------
    添加查询方法
    1.jt/src/main/java/com/jt/controller/RightsController.java
    @RequestMapping("/rights")
     /**
         * 需求: 查询2级菜单结构,并且封装为List集合
         * URL: /rights/getRightsList
         * 参数: 暂时没有
         * 请求类型: get
         * 返回值: SysResult对象(list集合)
         */
        @GetMapping("/getRightsList")
        public SysResult getRightsList(){

            List<Rights> rightsList = rightsService.getRightsList();
            return SysResult.success(rightsList);
        }

        2.jt/src/main/java/com/jt/service/RightsService.java
        List<Rights> getRightsList();

        3.jt/src/main/java/com/jt/service/RightsServiceImpl.java
         @Override
            public List<Rights> getRightsList() {
                return null;
            }


      --------------------------------------------------

   @Autowired
    private RightsMapper rightsMapper;

    @Override
    public List<Rights> getAll() {
        //查询全部不需要条件
        return rightsMapper.selectList(null);
        //查询rightsMapper中的查询语句
    }


    /**
     * 查询二级菜单信息
     * 1.查询一级菜单 parent_id=0
     * 2.查询二级           id=1
     */
    @Override
    public List<Rights> getRightsList() {
        //1.查询所有的一级菜单<Rights>
        //查询包装器QueryWrapper映射
        QueryWrapper queryWrapper = new QueryWrapper<>();
        //查询eq等于"parent_id",0 一级菜单
        queryWrapper.eq("parent_id", 0);
        //rightsMapper查询语句
        List<Rights> oneList = rightsMapper.selectList(queryWrapper);


        /**高效for循环
         * 第一个是类型 Rights
         * 第二个是你定义的名字 oneRights
         * 第三个是集合名字 oneList
         * */
        //先拿到一级菜单查询自己的二级菜单
        for (Rights oneRights : oneList) {
            //清空原来有条件
            queryWrapper.clear();
            //根据一级菜单的id查
            // eq等于parent_id二级oneRights查询的是Id的查询功能
            queryWrapper.eq("parent_id", oneRights.getId());
            //封装进一级菜单
            List<Rights>twoList=rightsMapper.selectList(queryWrapper);
            //实现父子关系进行封装
            //    private List<Rights> children;
            oneRights.setChildren(twoList);
        }

        //在执行完2级查询后返回1级中
        return oneList;




     --------------------------------------------------
左侧菜单实现和路由机制
import Home from "../components/Home.vue";
import user from "../components/user/user.vue";
import Item from "../components/items/Item.vue";

//使用路由机制
// 通过children[] 实现路由嵌套实现功能
 path: '/home', component: Home, children: [
      {path: '/user', component: user},
      {path: '/Item', component: Item}

      --------------------------------------------------
      import Vue from 'vue'
      import VueRouter from 'vue-router'
      import Login from '../components/Login.vue'
      import ElementUI from '../components/ElementUI.vue'
      import Home from '../components/Home.vue'
      import user from '../components/user/user.vue'
      import Item from '../components/items/Item.vue'
      import Welcome from '../components/Welcome.vue'

      //使用路由机制
      // 通过children[] 实现路由嵌套实现功能
      Vue.use(VueRouter)
      const routes = [
        {path: '/', redirect: '/login'},
        {path: '/login', component: Login},
        {path: '/elementUI', component: ElementUI},
        {
          path: '/home', component: Home, redirect: '/welcome',
          children: [
            {path: '/welcome', component: Welcome},
            {path: '/user', component: user},
            {path: '/Item', component: Item}

          ]
        }
      ]